
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringWriter;
import static java.lang.System.console;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import static java.lang.Math.pow;
import static java.lang.reflect.Array.set;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Singleton;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonWriter;
import static javax.servlet.jsp.jstl.core.Config.set;
import static javax.servlet.jsp.jstl.core.Config.set;
import static javax.servlet.jsp.jstl.core.Config.set;
import javax.websocket.EncodeException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

/**
 *
 * @author Diego
 */
//@ServerEndpoint("/endpoint")
@ServerEndpoint(value="/endpoint", encoders = {WSTransporteCodificador.class}, decoders =
        {WSTransporteDecodificador.class})
public class Socket {

   // private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
    private static Set<Session> conexiones = Collections.synchronizedSet(new HashSet<Session>());    
    private static HashMap<Session, String> conexiones2 = new HashMap<Session, String>(); 
    private static Partida partida=new Partida();
    
    private static boolean
        visibleLancha1 = false,
        visibleLancha2 = false,
        visibleLancha3 = false,
        visibleBarco1  = false,
        visibleBarco2  = false,
        visibleBarco3  = false,
        visibleBarco   = false;
        
    private static int lanchaActiva = 1;
    private static int velocidadX = 10;
    private static int velocidadY = 10;
    private static int widthObjetosBarco = 20, heigthObjetosBarco = 38;
    private static int widthObjetosLancha = 20, heigthObjetosLancha = 38;
 
    
    public void inicializarJuego () throws IOException{
        
        int initXBarco /*=100*/ ;
        int initYBarco /*=100*/ ;
        int initAnguloBarco /*=0*/ ;
        //Rango y velocidad debe levantarlos de property
        int initVelocidadBarco /*=200*/ ;
        int initRangoBarco /*=200*/ ;

        //Seteo posicion inicial de lancha
        int initXLancha1/* = 200*/ ;
        int initYLancha1/* = 200*/ ;
        int initXLancha2/* = 300*/ ;
        int initYLancha2/* = 300*/ ;
        int initXLancha3/* = 400*/ ;
        int initYLancha3/* = 400*/ ;
        int initAnguloLancha/* = 0*/ ;
        //Valores iniciales al comenzar partida
        int initVelocidadLancha /*=100*/ ;
        int initRangoLancha /*=100*/ ;

        Properties p = new Properties();
        String nomArch = "datos.properties";
        InputStream in;
        in = Socket.class.getResourceAsStream(nomArch);
        p.load(in);
        initXBarco = Integer.parseInt(p.getProperty("xBarco")); 
        initYBarco = Integer.parseInt(p.getProperty("yBarco"));
        initAnguloBarco = Integer.parseInt(p.getProperty("anguloBarco"));
        initXLancha1 = Integer.parseInt(p.getProperty("xLancha1"));
        initYLancha1 = Integer.parseInt(p.getProperty("yLancha1"));
        initAnguloLancha = Integer.parseInt(p.getProperty("anguloLancha1"));
        initXLancha2 = Integer.parseInt(p.getProperty("xLancha2")); 
        initYLancha2 = Integer.parseInt(p.getProperty("yLancha2")); 
        initAnguloLancha = Integer.parseInt(p.getProperty("anguloLancha2"));
        initXLancha3 = Integer.parseInt(p.getProperty("xLancha3"));
        initYLancha3 = Integer.parseInt(p.getProperty("yLancha3")); 
        initAnguloLancha = Integer.parseInt(p.getProperty("anguloLancha3")); 
        lanchaActiva = Integer.parseInt(p.getProperty("lanchaActiva"));
        initVelocidadLancha = Integer.parseInt(p.getProperty("velocidadLancha"));
        initVelocidadBarco  = Integer.parseInt(p.getProperty("velocidadBarco"));
        initRangoBarco= Integer.parseInt(p.getProperty("visibilidadBarco"));
        initRangoLancha= Integer.parseInt(p.getProperty("visibilidadLancha"));
        in.close();
        //seteo posicion inicial del barco
        
    
        //partida.asignarLancha(pirata1,1);//0
        //partida.asignarLancha(pirata2,2);//1
        //partida.asignarLancha(pirata3,3);//2
        //partida.lanchas[0]=pirata1;
        //partida.lanchas[1]=pirata2;
        //partida.lanchas[2]=pirata3;
        Barco corsario= new Barco (initXBarco,initYBarco,initAnguloBarco,initVelocidadBarco,initRangoBarco);
        Lancha pirata1 = new Lancha(1,initXLancha1,initYLancha1,initAnguloLancha,initVelocidadLancha,initRangoLancha);
        Lancha pirata2 = new Lancha(2,initXLancha2,initYLancha2,initAnguloLancha,initVelocidadLancha,initRangoLancha);
        Lancha pirata3 = new Lancha(3,initXLancha3,initYLancha3,initAnguloLancha,initVelocidadLancha,initRangoLancha);
        
        partida.insFrontLancha(pirata1);
        partida.insFrontLancha(pirata2);
        partida.insFrontLancha(pirata3); 
            
        partida.asignarCorsario(corsario);

    }
    
    @OnOpen
    public void onOpen(Session session) throws IOException{
        

        if(conexiones2.isEmpty()){
            
            inicializarJuego();
           // obtenerPropertiesGrupos();
            //System.out.println("Proper " + velocidadLancha);
          }
        System.out.println("conectados: " + conexiones2.size());            
        if(conexiones2.size() < 2){
            System.out.println("cantidad en conexiones 2 " + conexiones2.size() );
            if(!conexiones2.containsValue(session))
            {
                if(conexiones2.isEmpty()){
                    conexiones2.put(session, "Barco");
                    conexiones.add(session);
                    
                }
                else{
                    conexiones2.put(session, "Lancha");
                    conexiones.add(session);
                }
            }
        }
        
    }
    
    @OnMessage
    public void onMessage(Objeto obj, Session sessions) throws IOException, EncodeException { 
        
        String tipo = obj.getJson().getString("accion");
        String rol = conexiones2.get(sessions);

        //System.out.println("llego MOVIMIENTO " + tipo + " " + xBarco + " " + yBarco + " " + anguloBarco);
        
        switch(tipo)
        {
            case "nuevaPartida":
                if(conexiones2.containsKey(sessions)){
                    JsonObjectBuilder construirJson = Json.createObjectBuilder().add("rol",rol);
                    JsonObject jsonElijoRol = construirJson.build();
                    sessions.getBasicRemote().sendObject(jsonElijoRol);
                }
                else{
                    JsonObjectBuilder construirJson = Json.createObjectBuilder().add("rol",rol);
                    JsonObject jsonElijoRol = construirJson.build();
                    sessions.getBasicRemote().sendObject(jsonElijoRol);
                }
                break;
                
            case "nuevaPartidaCarga":
                if(conexiones2.containsKey(sessions)){
                
                    JsonObjectBuilder construirJson = Json.createObjectBuilder().add("rol",rol);
                    construirJson = construirJson.add("accion", "nuevaPartidaCarga"); 
                    JsonObject jsonElijoRol = construirJson.build();
                    sessions.getBasicRemote().sendObject(jsonElijoRol);
                }
                else{
                    JsonObjectBuilder construirJson = Json.createObjectBuilder().add("rol",rol);
                    JsonObject jsonElijoRol = construirJson.build();
                    sessions.getBasicRemote().sendObject(jsonElijoRol);
                }
                break;
            
            case "movimiento":
                
                System.out.println("llego MOVIMIENTO " + tipo + rol);
                String direccion = obj.getJson().getString("direccion");

                //Obtengo datos del objeto barco
                int anguloBarco= partida.getAnguloBarco();
                int xBarco=partida.getCoordXBarco();
                int yBarco=partida.getCoordYBarco();
                int visibilidadBarco=partida.getRangoVisionBarco();
                int velocidadBarco=partida.getVelocidadBarco();     

///////////////////////////////OPCION 1/////////////////////////////////////////
                
/*                //Obtengo datos del objero lancha
                int anguloLancha1= partida.nesimaLancha(1).getAngulo();
                int xLancha1=partida.nesimaLancha(1).getCoord().getCoordX();
                int yLancha1=partida.nesimaLancha(1).getCoord().getCoordY();
                int visibilidadLancha=partida.nesimaLancha(1).getRangoVision();
                int velocidadLancha=partida.nesimaLancha(1).getVelocidad();

                int anguloLancha2= partida.nesimaLancha(2).getAngulo();
                int xLancha2=partida.nesimaLancha(2).getCoord().getCoordX();
                int yLancha2=partida.nesimaLancha(2).getCoord().getCoordY();

                int anguloLancha3= partida.nesimaLancha(3).getAngulo();
                int xLancha3=partida.nesimaLancha(3).getCoord().getCoordX();
                int yLancha3=partida.nesimaLancha(3).getCoord().getCoordY();
               
///////////////////////////////OPCION 2/////////////////////////////////////////                
                
                /Obtengo datos del objeto Lancha*/
               int nroLancha=1;
                int anguloLancha1= partida.getAnguloLancha(nroLancha);
                int xLancha1=partida.getCoordXLancha(nroLancha);
                int yLancha1=partida.getCoordYLancha(nroLancha);
                int visibilidadLancha=partida.getRangoVisionLancha(nroLancha);
                int velocidadLancha=partida.getVelocidadLancha(nroLancha);
                nroLancha=2;
                int anguloLancha2= partida.getAnguloLancha(nroLancha);
                int xLancha2=partida.getCoordXLancha(nroLancha);
                int yLancha2=partida.getCoordYLancha(nroLancha);
                int visibilidadLancha2=partida.getRangoVisionLancha(nroLancha);
                int velocidadLancha2=partida.getVelocidadLancha(nroLancha);        
                nroLancha=3;
                int anguloLancha3= partida.getAnguloLancha(nroLancha);
                int xLancha3=partida.getCoordXLancha(nroLancha);
                int yLancha3=partida.getCoordYLancha(nroLancha);
                int visibilidadLancha3=partida.getRangoVisionLancha(nroLancha);
                int velocidadLancha3=partida.getVelocidadLancha(nroLancha);
                
                switch(rol)
                {
                    case "Barco":
                        
                        System.out.println("Coordenadas Iniciales Barco " + "x: " + xBarco + "y: "+yBarco);
 
                        Barco aux= calculaMovimiento (partida.getCorsario(),direccion);
                        
                        int calculox = aux.getCoordX();
                        int calculoy = aux.getCoordY();
                        
                        System.out.println("Coordenadas Auxiliares Barco" + "x:" + calculox + "y:"+calculoy);
                        
                        visibleBarco = false;
                        
                        if((calculox - widthObjetosBarco/2 >0) && (calculoy - heigthObjetosBarco/2 >0) &&
                            (calculox + widthObjetosBarco/2 < 1200) && (calculoy + heigthObjetosBarco/2 < 510)){
                            
                            System.out.println("llego valida colision " + calculox + calculoy + xLancha1 + yLancha1 + 
                                           xLancha2 + yLancha2 + xLancha3 + yLancha3);
                            
                            if(!validaColision(calculox, calculoy, widthObjetosBarco, heigthObjetosBarco, 
                                               xLancha1, yLancha1, widthObjetosLancha, heigthObjetosLancha)){
                                
                                if(!validaColision(calculox, calculoy, widthObjetosBarco, heigthObjetosBarco,
                                                   xLancha2, yLancha2, widthObjetosLancha, heigthObjetosLancha)){
                                
                                    if(!validaColision(calculox, calculoy, widthObjetosBarco, heigthObjetosBarco,
                                                       xLancha3, yLancha3, widthObjetosLancha, heigthObjetosLancha)){
                                        
                                        /*Compruebo que lanchas ve el barco*/
                                        if(visibilidad(calculox, xLancha1, calculoy, yLancha1, visibilidadBarco)){
                                            visibleLancha1 = true;
                                            System.out.println("visible lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                        }
                                        else{
                                            visibleLancha1 = false;
                                        }
                                        if(visibilidad(calculox, xLancha2, calculoy, yLancha2, visibilidadBarco)){
                                            visibleLancha2 = true;
                                            System.out.println("visible lancha 2 " + xBarco + " " + yBarco + " " + xLancha2 + " " + yLancha2);
                                        }
                                        else{
                                            visibleLancha2 = false;
                                        }
                                        
                                        if(visibilidad(calculox, xLancha3, calculoy, yLancha3, visibilidadBarco)){
                                            visibleLancha3 = true;
                                            System.out.println("visible lancha 3 " + xBarco + " " + yBarco + " " + xLancha3 + " " + yLancha3);
                                        }
                                        else{
                                            visibleLancha3 = false;
                                        }
                                        /*Compruebo si las lanchas pasan a ver al barco*/
                                        if(visibilidad(calculox, xLancha1, calculoy, yLancha1, visibilidadLancha)){
                                            visibleBarco1 = true;
                                            System.out.println("visible barco lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                        }
                                        else{
                                            visibleBarco1 = false;
                                        }
                                        if(visibilidad(calculox, xLancha2, calculoy, yLancha2, visibilidadLancha)){
                                            visibleBarco2 = true;
                                            System.out.println("visible barco lancha 2 " + xBarco + " " + yBarco + " " + xLancha2 + " " + yLancha2);
                                        }
                                        else{
                                            visibleBarco2 = false;
                                        }
                                        if(visibilidad(calculox, xLancha3, calculoy, yLancha3, visibilidadLancha)){
                                            visibleBarco3 = true;
                                            System.out.println("visible barco lancha 3 " + xBarco + " " + yBarco + " " + xLancha3 + " " + yLancha3);
                                        }
                                        else{
                                            visibleBarco3 = false;
                                        }
                                        if(visibleBarco1  || visibleBarco2 || visibleBarco3){
                                            visibleBarco = true;
                                        }
                                        else{
                                            visibleBarco = false;
                                        }             
                                        partida.asignarCorsario(aux);
                                        
                                        System.out.println("Coordenadas Asignadas al Barco " + "x: " + partida.getCoordXBarco() + "y: "+partida.getCoordYBarco());
                                        System.out.println("Coordenadas enviadas JSON " + "x: " + calculox + "y: "+ calculoy);
                                        
                                        JsonObjectBuilder construirJson = Json.createObjectBuilder().add("rol",rol);
                                        construirJson = construirJson.add("accion", "movimiento");
                                        
                                        construirJson = construirJson.add("x",calculox);
                                        construirJson = construirJson.add("y",calculoy);

                                        construirJson = construirJson.add("visibleLancha1", visibleLancha1);
                                        construirJson = construirJson.add("visibleLancha2", visibleLancha2);
                                        construirJson = construirJson.add("visibleLancha3", visibleLancha3);
                                        construirJson = construirJson.add("visibleBarco", visibleBarco);
                                        JsonObject jsonMueveBarco = construirJson.build();
                                        for (Session p : conexiones) { 
                                            p.getBasicRemote().sendObject(jsonMueveBarco);
                                        }
                                    }
                                    else{
                                        System.out.println("colision barco1 con lancha3");
                                    }
                                }
                                else{
                                    System.out.println("colision barco1 con lancha2");
                                }

                            }
                            else{
                                System.out.println("colision barco1 con lancha1");
                            }
                        }
                        //sessions.getBasicRemote().sendObject(jsonMueveBarco);
                        break;
                        
                    case "Lancha":
                        System.out.println("movimiento lancha");
                        if(lanchaActiva == 1){

                            //Lancha aux2= calculaMovimiento (partida.nesimaLancha(1),direccion);
                            Lancha aux2=calculaMovimiento (partida.getLancha(1),direccion);
                            
                            int calculo2x = aux2.getCoordX();
                            int calculo2y = aux2.getCoordY();   
                            
                            System.out.println("Coordenadas iniciales de la Lancha " + "x: " + partida.getCoordXLancha(1)+ "y: "+partida.getCoordYLancha(1));
                                    
                            xBarco=partida.getCoordXBarco();
                            yBarco=partida.getCoordYBarco();
                            
                            xLancha2=partida.getCoordXLancha(2);
                            yLancha2=partida.getCoordYLancha(2);
                            
                            xLancha3=partida.getCoordXLancha(3);
                            yLancha3=partida.getCoordYLancha(3);
                            //OPCINO2
                            //Lancha calculo2 = new Lancha(1,anguloLancha1, xLancha1, yLancha1,velocidadLancha,visibilidadLancha);
                            //calculaMovimiento(calculo2, direccion);
                            
                            //int calculo2x = calculo2.getCoord().getCoordX();
                            //int calculo2y = calculo2.getCoord().getCoordY();
                            
                            System.out.println("Coordenadas antes de colision de lancha2 " + "x: " + xLancha2+ "y: "+yLancha2);
                            System.out.println("Coordenadas antes de colision de lancha3 " + "x: " + xLancha3+ "y: "+yLancha3);
                            
                            if((calculo2x - widthObjetosLancha/2 >0) && (calculo2y - heigthObjetosLancha/2 >0) &&
                            (calculo2x + widthObjetosLancha/2 < 1200) && (calculo2y + heigthObjetosLancha/2 < 510)){
                                                                     
                                if(!validaColision(calculo2x, calculo2y, widthObjetosLancha, heigthObjetosLancha,
                                                   xBarco, yBarco, widthObjetosBarco, heigthObjetosBarco)){
                            
                                if(!validaColision(calculo2x, calculo2y, widthObjetosLancha, heigthObjetosLancha,
                                                       xLancha2, yLancha2, widthObjetosLancha, heigthObjetosLancha)){
                                        if(!validaColision(calculo2x, calculo2y, widthObjetosLancha, heigthObjetosLancha,
                                                           xLancha3, yLancha3, widthObjetosLancha, heigthObjetosLancha)){
                                            
                                            if(visibilidad(xBarco, calculo2x, yBarco, calculo2y, visibilidadBarco)){
                                                visibleLancha1 = true;
                                                System.out.println("visible lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleLancha1 = false;
                                            }
                                            if(visibilidad(xBarco, calculo2x, yBarco, calculo2y, visibilidadLancha)){
                                                visibleBarco1 = true;
                                                System.out.println("visible barco lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco1 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha2, yBarco, yLancha2, visibilidadLancha)){
                                                visibleBarco2 = true;
                                                System.out.println("visible barco lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco2 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha3, yBarco, yLancha3, visibilidadLancha)){
                                                visibleBarco3 = true;
                                                System.out.println("visible barco lancha 1 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco3 = false;
                                            }
                                            if(visibleBarco1 || visibleBarco2 || visibleBarco3){
                                                visibleBarco = true;
                                            }
                                            else{
                                                visibleBarco = false;
                                            }
                                            
                                           // partida.eliminarLancha(1);
                                           // partida.asignarLancha(aux2,1);
                                            //partida.lanchas[1]=aux2;
                                                                                       
                                            //int xLancha1N = calculo2x;
                                            //int yLancha1N = calculo2y;
                                            //Coordenadas newCoord = new Coordenadas(xLancha1N,yLancha1N);
                                            //this.partida.nesimaLancha(1).setCoord(newCoord);
                                            
                                            partida.setCoordXLancha(1, calculo2x);
                                            partida.setCoordYLancha(1, calculo2y);
                                            
                                            System.out.println("Coordenadas Asignadas a la Lancha " + "x: " + partida.getCoordXLancha(1)+ "y: "+partida.getCoordYLancha(1));
                            
                                            
                                            System.out.println("movimio lancha !!! " + xLancha1 + yLancha1);
                                            JsonObjectBuilder construirJson2 = Json.createObjectBuilder().add("rol",rol);
                                            construirJson2 = construirJson2.add("accion", "movimiento");
                                            construirJson2 = construirJson2.add("x",calculo2x);
                                            construirJson2 = construirJson2.add("y",calculo2y);
                                            construirJson2 = construirJson2.add("visibleLancha1", visibleLancha1);
                                            construirJson2 = construirJson2.add("visibleLancha2", visibleLancha2);
                                            construirJson2 = construirJson2.add("visibleLancha3", visibleLancha3);
                                            construirJson2 = construirJson2.add("visibleBarco", visibleBarco);
                                            JsonObject jsonMueveLancha = construirJson2.build();
                                            for (Session p : conexiones) { 
                                                p.getBasicRemote().sendObject(jsonMueveLancha);
                                            //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if(lanchaActiva == 2){
 
                            
                            //Lancha aux3= calculaMovimiento (partida.nesimaLancha(2),direccion);
                            Lancha aux3=calculaMovimiento (partida.getLancha(2),direccion);
                            
                            int calculo3x = aux3.getCoordX();
                            int calculo3y = aux3.getCoordY();                         

                            //OPCION2
                            //Lancha calculo3 = new Lancha (2,anguloLancha2, xLancha2, yLancha2,velocidadLancha,visibilidadLancha);
                            //calculaMovimiento(calculo3, direccion);
                            
                            //int calculo3x = calculo3.getCoord().getCoordX();
                            //int calculo3y = calculo3.getCoord().getCoordY();
                            xBarco=partida.getCoordXBarco();
                            yBarco=partida.getCoordYBarco();
                            
                            if((calculo3x - widthObjetosLancha/2 >0) && (calculo3y - heigthObjetosLancha/2 >0) &&
                            (calculo3x + widthObjetosLancha/2 < 1200) && (calculo3y + heigthObjetosLancha/2 < 510)){
                                                                 
                                if(!validaColision(calculo3x, calculo3y, widthObjetosLancha, heigthObjetosLancha,
                                                   xBarco, yBarco, widthObjetosBarco, heigthObjetosBarco)){
                                    if(!validaColision(calculo3x, calculo3y, widthObjetosLancha, heigthObjetosLancha,
                                                       xLancha1, yLancha1, widthObjetosLancha, heigthObjetosLancha)){
                                        if(!validaColision(calculo3x, calculo3y, widthObjetosLancha, heigthObjetosLancha,
                                                            xLancha3, yLancha3, widthObjetosLancha, heigthObjetosLancha)){
                                            if(visibilidad(xBarco, calculo3x, yBarco, calculo3y, visibilidadBarco)){
                                                visibleLancha2 = true;
                                                System.out.println("visible lancha 2 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleLancha2 = false;
                                            }
                                            if(visibilidad(xBarco, calculo3x, yBarco, calculo3y, visibilidadLancha)){
                                                visibleBarco1 = true;
                                                System.out.println("visible barco lancha 2 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco1 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha1, yBarco, yLancha1, visibilidadLancha)){
                                                visibleBarco2 = true;
                                                System.out.println("visible barco lancha 2 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco2 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha3, yBarco, yLancha3, visibilidadLancha)){
                                                visibleBarco3 = true;
                                                System.out.println("visible barco lancha 2 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco3 = false;
                                            }
                                            if(visibleBarco1 || visibleBarco2 || visibleBarco3){
                                                visibleBarco = true;
                                            }
                                            else{
                                                visibleBarco = false;
                                            }
                                            
                                            //partida.eliminarLancha(2);
                                           // partida.asignarLancha(aux3,2);
                                            //partida.lanchas[2]=aux3; 
                                            
                                            //int xLancha2N = calculo3x;
                                            //int yLancha2N = calculo3y;
                                            //Coordenadas newCoord3 = new Coordenadas(xLancha2N,yLancha2N);
                                            //this.partida.nesimaLancha(2).setCoord(newCoord3);
                                            
                                            partida.setCoordXLancha(2, calculo3x);
                                            partida.setCoordYLancha(2, calculo3y);
                                                                                        
                                            JsonObjectBuilder construirJson2 = Json.createObjectBuilder().add("rol",rol);
                                            construirJson2 = construirJson2.add("accion", "movimiento");
                                            construirJson2 = construirJson2.add("x", calculo3x);
                                            construirJson2 = construirJson2.add("y", calculo3y);
                                            construirJson2 = construirJson2.add("visibleLancha1", visibleLancha1);
                                            construirJson2 = construirJson2.add("visibleLancha2", visibleLancha2);
                                            construirJson2 = construirJson2.add("visibleLancha3", visibleLancha3);
                                            construirJson2 = construirJson2.add("visibleBarco", visibleBarco);
                                            JsonObject jsonMueveLancha = construirJson2.build();
                                            for (Session p : conexiones) { 
                                                p.getBasicRemote().sendObject(jsonMueveLancha);
                                            //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if(lanchaActiva == 3){
                            
                            //Lancha aux4= calculaMovimiento (partida.nesimaLancha(3),direccion);
                            Lancha aux4=calculaMovimiento (partida.getLancha(3),direccion);
                            int calculo4x = aux4.getCoordX();
                            int calculo4y = aux4.getCoordY();                                     
                            
                            //OPCION 3
                           // Lancha calculo4 = new Lancha(3,anguloLancha3, xLancha3, yLancha3,velocidadLancha,visibilidadLancha);
                            
                            //calculaMovimiento(calculo4, direccion);
                            
                            //int calculo4x = calculo4.getCoord().getCoordX();
                            //int calculo4y = calculo4.getCoord().getCoordY();
                            xBarco=partida.getCoordXBarco();
                            yBarco=partida.getCoordYBarco();
                            
                            if((calculo4x - widthObjetosLancha/2 >0) && (calculo4y - heigthObjetosLancha/2 >0) &&
                            (calculo4x + widthObjetosLancha/2 < 1200) && (calculo4y + heigthObjetosLancha/2 < 510)){
            
                                if(!validaColision(calculo4x, calculo4y, widthObjetosLancha, heigthObjetosLancha, 
                                                   xBarco, yBarco, widthObjetosBarco, heigthObjetosBarco)){
                                    if(!validaColision(calculo4x, calculo4y, widthObjetosLancha, heigthObjetosLancha,
                                                       xLancha1, yLancha1, widthObjetosLancha, heigthObjetosLancha)){
                                        if(!validaColision(calculo4x, calculo4y, widthObjetosLancha, heigthObjetosLancha,
                                                            xLancha2, yLancha2, widthObjetosLancha, heigthObjetosLancha)){
                                            if(visibilidad(xBarco, calculo4x, yBarco, calculo4y, visibilidadBarco)){
                                                visibleLancha3 = true;
                                                System.out.println("visible lancha 3 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleLancha3 = false;
                                            }
                                            if(visibilidad(xBarco, calculo4x, yBarco, calculo4y, visibilidadLancha)){
                                                visibleBarco1 = true;
                                                System.out.println("visible barco lancha 3 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco1 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha1, yBarco, yLancha1, visibilidadLancha)){
                                                visibleBarco2 = true;
                                                System.out.println("visible barco lancha 3 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco2 = false;
                                            }
                                            if(visibilidad(xBarco, xLancha2, yBarco, yLancha2, visibilidadLancha)){
                                                visibleBarco3 = true;
                                                System.out.println("visible barco lancha 3 " + xBarco + " " + yBarco + " " + xLancha1 + " " + yLancha1);
                                            }
                                            else{
                                                visibleBarco3 = false;
                                            }
                                            if(visibleBarco1 || visibleBarco2 || visibleBarco3){
                                                visibleBarco = true;
                                            }
                                            else{
                                                visibleBarco = false;
                                            }
                                            //partida.eliminarLancha(3);
                                            //partida.asignarLancha(aux4,3);
                                            //partida.lanchas[2]=aux4;
                                            
                                            //int xLancha3N = calculo4x;
                                            //int yLancha3N = calculo4y;
                                            //Coordenadas newCoord3 = new Coordenadas(xLancha3N,yLancha3N);
                                            
                                            partida.setCoordXLancha(3, calculo4x);
                                            partida.setCoordYLancha(3, calculo4y);
                                            
                                            
                                            JsonObjectBuilder construirJson2 = Json.createObjectBuilder().add("rol",rol);
                                            construirJson2 = construirJson2.add("accion", "movimiento");
                                            construirJson2 = construirJson2.add("x", calculo4x);
                                            construirJson2 = construirJson2.add("y", calculo4y);
                                            construirJson2 = construirJson2.add("visibleLancha1", visibleLancha1);
                                            construirJson2 = construirJson2.add("visibleLancha2", visibleLancha2);
                                            construirJson2 = construirJson2.add("visibleLancha3", visibleLancha3);
                                            construirJson2 = construirJson2.add("visibleBarco", visibleBarco);
                                            JsonObject jsonMueveLancha = construirJson2.build();
                                            for (Session p : conexiones) { 
                                                p.getBasicRemote().sendObject(jsonMueveLancha);
                                            //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        break;    
                }
                break;
            case "cambioLancha":
                System.out.println("movimiento lancha");
                lanchaActiva = obj.getJson().getInt("lanchaActiva");
                JsonObjectBuilder construirJson3 = Json.createObjectBuilder().add("accion","cambioLancha");
                construirJson3 = construirJson3.add("lanchaActiva", lanchaActiva);
                JsonObject jsonCambiaLanchaActiva = construirJson3.build();
                for (Session p : conexiones) { 
                    p.getBasicRemote().sendObject(jsonCambiaLanchaActiva);
                    //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                }
                break;
                
            case "rotacionDerecha":
                /*+45*/
                switch(rol){
                    case "Barco":
                        
                        anguloBarco= partida.getAnguloBarco();
                        System.out.println("Obtengo Angulo Barco: " + (anguloBarco));
                        
                        if(anguloBarco == 360 || anguloBarco == -360){
                           anguloBarco = 0;
                        }
                        System.out.println("Reseteo Angulo Barco: " + (anguloBarco));
                        
                        anguloBarco = anguloBarco + 45;
                        System.out.println("Obtengo Angulo Modificado: " + (anguloBarco));
                        
                        partida.setAnguloBarco(anguloBarco);
                        System.out.println("Angulo Barco Asignado: " + partida.getAnguloBarco());
                        
                        System.out.println("Angulo JSON" + anguloBarco);
                        
                        JsonObjectBuilder construirJson4 = Json.createObjectBuilder().add("accion","rotacion");
                        construirJson4 = construirJson4.add("rol", rol);
                        construirJson4 = construirJson4.add("direccion", "derecha");
                        construirJson4 = construirJson4.add("angulo", (anguloBarco)*Math.PI/180);
                        
                        System.out.println("tset" + (anguloBarco));
                        System.out.println("llego rotación derecha " +( Math.toRadians(anguloBarco + 45)));
                        JsonObject jsonCambiaAnguloBarco = construirJson4.build();
                        
                        System.out.println("Angulo asignado: " + partida.getAnguloBarco());
                        System.out.println("Angulo jason" + anguloBarco);
                        
                        for (Session p : conexiones) { 
                            p.getBasicRemote().sendObject(jsonCambiaAnguloBarco);
                            //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                        }
                        break;
                    case "Lancha":
                        
                        anguloLancha1= partida.getAnguloLancha(1);
                        
                        if(lanchaActiva == 1){
                            if(anguloLancha1 == 360 || anguloLancha1 == -360){
                                anguloLancha1 = 0;
                            }
                            anguloLancha1 = anguloLancha1 + 45;
                            
                            partida.setAnguloLancha(1,anguloLancha1);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "derecha");
                            construirJson5 = construirJson5.add("angulo", (anguloLancha1)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha1));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha1 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        if(lanchaActiva == 2){
                        
                            anguloLancha2= partida.getAnguloLancha(2);
                            if(anguloLancha2 == 360 || anguloLancha2 == -360){
                                anguloLancha2 = 0;
                            }
                            anguloLancha2 = anguloLancha2 + 45;
                            
                            partida.setAnguloLancha(2,anguloLancha2);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "derecha");
                            construirJson5 = construirJson5.add("angulo", (anguloLancha2)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha2));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha2 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        if(lanchaActiva == 3){
                            
                            anguloLancha3= partida.getAnguloLancha(3);
                            
                            if(anguloLancha3 == 360 || anguloLancha3 == -360){
                                anguloLancha3 = 0;
                            }
                            anguloLancha3 = anguloLancha3 + 45;
                            
                            partida.setAnguloLancha(3,anguloLancha3);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "derecha");
                            construirJson5 = construirJson5.add("lanchaActiva", lanchaActiva);
                            construirJson5 = construirJson5.add("angulo", (anguloLancha3)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha3));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha3 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        break;
                }
                System.out.println("llego rotación derecha");
                break;
            
            case "rotacionIzquierda":
                /*-45*/
                switch(rol){
                    case "Barco":
                        
                        anguloBarco= partida.getAnguloBarco();
                        
                        if(anguloBarco == 360 || anguloBarco == -360){
                            anguloBarco = 0;
                        }
                        System.out.println("Reseteo Angulo Barco: " + (anguloBarco));
                        
                        anguloBarco = anguloBarco - 45;
                        System.out.println("Obtengo Angulo Modificado: " + (anguloBarco));
                        
                        partida.setAnguloBarco(anguloBarco);
                        System.out.println("Angulo Barco Asignado: " + partida.getAnguloBarco());
                        
                        System.out.println("Angulo JSON" + anguloBarco);
                                                
                        JsonObjectBuilder construirJson4 = Json.createObjectBuilder().add("accion","rotacion");
                        construirJson4 = construirJson4.add("rol", rol);
                        construirJson4 = construirJson4.add("direccion", "izquierda");
                        construirJson4 = construirJson4.add("angulo", (anguloBarco)*Math.PI/180);
                        
                        System.out.println("tset" + (anguloBarco));
                        System.out.println("llego rotación derecha " +( Math.toRadians(anguloBarco + 45)));
                        JsonObject jsonCambiaAnguloBarco = construirJson4.build();
                        for (Session p : conexiones) { 
                            p.getBasicRemote().sendObject(jsonCambiaAnguloBarco);
                            //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                        }
                        break;
                    case "Lancha":
                        if(lanchaActiva == 1 ){
                            
                            anguloLancha1= partida.getAnguloLancha(1);

                            if(anguloLancha1 == 360 || anguloLancha1 == -360){
                                anguloLancha1 = 0;
                            }
                            anguloLancha1 = anguloLancha1 - 45;
                            
                            partida.setAnguloLancha(1,anguloLancha1);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "izquierda");
                            construirJson5 = construirJson5.add("angulo", (anguloLancha1)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha1));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha1 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        if(lanchaActiva == 2){
                            
                            anguloLancha2= partida.getAnguloLancha(2);
                            
                            if(anguloLancha2 == 360 || anguloLancha2 == -360){
                                anguloLancha2 = 0;
                            }
                            anguloLancha2 = anguloLancha2 - 45;
                            
                            partida.setAnguloLancha(2,anguloLancha2);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "izquierda");
                            construirJson5 = construirJson5.add("angulo", (anguloLancha2)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha2));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha2 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        if(lanchaActiva == 3){
                            
                            anguloLancha3= partida.getAnguloLancha(3);

                            if(anguloLancha3 == 360 || anguloLancha3 == -360){
                                anguloLancha3 = 0;
                            }
                            anguloLancha3 = anguloLancha3 - 45;
                            
                            partida.setAnguloLancha(3,anguloLancha3);
                            
                            JsonObjectBuilder construirJson5 = Json.createObjectBuilder().add("accion","rotacion");
                            construirJson5 = construirJson5.add("rol", rol);
                            construirJson5 = construirJson5.add("direccion", "izquierda");
                            construirJson5 = construirJson5.add("lanchaActiva", lanchaActiva);
                            construirJson5 = construirJson5.add("angulo", (anguloLancha3)*Math.PI/180);
                            
                            System.out.println("tset" + (anguloLancha3));
                            System.out.println("llego rotación derecha " +( Math.toRadians(anguloLancha3 + 45)));
                            JsonObject jsonCambiaAnguloLancha = construirJson5.build();
                            for (Session p : conexiones) { 
                                p.getBasicRemote().sendObject(jsonCambiaAnguloLancha);
                                //sessions.getBasicRemote().sendObject(jsonMueveLancha);
                            }
                        }
                        break;
                }
                System.out.println("llego rotación izquierda");
                break;
        }
    }
    
    @OnClose
    public void onClose(Session peer) throws IOException, EncodeException 
    {
        conexiones2.remove(peer);
        conexiones.remove(peer);
        //delete partida???
        System.out.println("Cerro conexion WEBSOCKET");
    }
    
    public Barco calculaMovimiento(Barco corsario, String direccion){
        
        int  x=corsario.getCoordX();
        int  y=corsario.getCoordY();
        int angulo=corsario.getAngulo();
        int velocidad=corsario.getVelocidad();
        int visibilidad=corsario.getRangoVision();
        
        Barco calculo = new Barco (x,y,angulo,velocidad,visibilidad);
                 
        if(direccion.equalsIgnoreCase("arriba")){
                       
            System.out.println("entra DIRECCION ARRIBA");
            System.out.println("entra a movimientoarriba con " + "x " +x+ "y " + y + "angulo"+ angulo);
            if(calculo.getAngulo() == -360 || calculo.getAngulo() == 0 || calculo.getAngulo() == 360){
                y -=10;
                calculo.setCoordY(y);

            }
            if(calculo.getAngulo() == -180 || calculo.getAngulo() == 180){
                y +=10;
                calculo.setCoordY(y);
                
            }
            if(calculo.getAngulo() == 45 || calculo.getAngulo() == -315){
                x +=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -45 || calculo.getAngulo() == 315){
                x -=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 90 || calculo.getAngulo() == -270){
                x +=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -90 || calculo.getAngulo() == 270){
                x -=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 135 || calculo.getAngulo() == -225){
                x +=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
             System.out.println("asigna x y " + calculo.getCoordX() + calculo.getCoordY() + direccion + calculo.getAngulo());   
            }
            if(calculo.getAngulo() == 225 || calculo.getAngulo() == -135){
                x -=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
        }
        if(direccion.equalsIgnoreCase("abajo")){
            if(calculo.getAngulo() == 180 || calculo.getAngulo() == -180){
                y -=10;
                calculo.setCoordY(y);
            }
            if(calculo.getAngulo() == -360 || calculo.getAngulo() == 0 || calculo.getAngulo() == 360){
                y +=10;
                calculo.setCoordY(y);
            }
            if(calculo.getAngulo() == -315 || calculo.getAngulo() == 225){
                x +=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 135){
                x -=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -90 || calculo.getAngulo() == 270){
                x +=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -270 || calculo.getAngulo() == 90){
                x -=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -45 || calculo.getAngulo() == -225 || calculo.getAngulo() == 315){
                x +=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 45 || calculo.getAngulo() == -135){
                x -=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
        }
        return calculo;
    }   
    
    public Lancha calculaMovimiento(Lancha pirata, String direccion){
        
        int  x=pirata.getCoordX();
        int  y=pirata.getCoordY();
        int angulo=pirata.getAngulo();
        int velocidad=pirata.getVelocidad();
        int visibilidad=pirata.getRangoVision();
        int nro=pirata.getNroLancha();
        
        Lancha calculo = new Lancha (nro,x,y,angulo,velocidad,visibilidad);
                 
        if(direccion.equalsIgnoreCase("arriba")){
                       
            System.out.println("entra DIRECCION ARRIBA");
            System.out.println("entra a movimientoarriba con " + "x " +x+ "y " + y + "angulo"+ angulo);
            if(calculo.getAngulo() == -360 || calculo.getAngulo() == 0 || calculo.getAngulo() == 360){
                y -=10;
                calculo.setCoordY(y);

            }
            if(calculo.getAngulo() == -180 || calculo.getAngulo() == 180){
                y +=10;
                calculo.setCoordY(y);
                
            }
            if(calculo.getAngulo() == 45 || calculo.getAngulo() == -315){
                x +=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -45 || calculo.getAngulo() == 315){
                x -=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 90 || calculo.getAngulo() == -270){
                x +=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -90 || calculo.getAngulo() == 270){
                x -=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 135 || calculo.getAngulo() == -225){
                x +=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
             System.out.println("asigna x y " + calculo.getCoordX() + calculo.getCoordY() + direccion + calculo.getAngulo());   
            }
            if(calculo.getAngulo() == 225 || calculo.getAngulo() == -135){
                x -=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
        }
        if(direccion.equalsIgnoreCase("abajo")){
            if(calculo.getAngulo() == 180 || calculo.getAngulo() == -180){
                y -=10;
                calculo.setCoordY(y);
            }
            if(calculo.getAngulo() == -360 || calculo.getAngulo() == 0 || calculo.getAngulo() == 360){
                y +=10;
                calculo.setCoordY(y);
            }
            if(calculo.getAngulo() == -315 || calculo.getAngulo() == 225){
                x +=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 135){
                x -=10;
                y -=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -90 || calculo.getAngulo() == 270){
                x +=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -270 || calculo.getAngulo() == 90){
                x -=10;
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == -45 || calculo.getAngulo() == -225 || calculo.getAngulo() == 315){
                x +=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
            if(calculo.getAngulo() == 45 || calculo.getAngulo() == -135){
                x -=10;
                y +=10;
                calculo.setCoordY(y);
                calculo.setCoordX(x);
            }
        }
        return calculo;
    }   
   
    public boolean validaColision(int x1, int y1, int widthObjetos1, int heigthObjetos1, 
                                  int x2, int y2, int widthObjetos2, int heigthObjetos2)
    {
        if( (x1 + widthObjetos1 >= x2) &&
            (x1 <= x2 + widthObjetos2) &&
            (y1 + heigthObjetos1 >= y2) &&
            (y1 <= y2 + heigthObjetos2)){
            System.out.println("HAY COLISION");
            return true;

        }
        else{
            return false;
        }
    }
    
    public boolean visibilidad(int xBarco, int xLancha, int yBarco, int yLancha, int rangoVisib){
        int x, y;
        double dist2Ptos =0, menor;
        boolean isVisible = false;
        
        if(xBarco > xLancha && yBarco > yLancha){
                x= xBarco - xLancha;
                y= yBarco - yLancha;
                dist2Ptos= Math.sqrt(pow(x,2)+pow(y,2));
                System.out.println("distancia de 2 puntos caso 1" + dist2Ptos );
        }
        else if(xBarco > xLancha&& yBarco == yLancha){
                x = xBarco - xLancha;
                dist2Ptos = Math.sqrt(pow(x,2));
                System.out.println("distancia de 2 puntos caso 2 " + dist2Ptos );
        }
        else if(xBarco > xLancha && yBarco < yLancha){
            x = xBarco - xLancha;
            y = yLancha - yBarco;
            dist2Ptos= Math.sqrt(pow(x,2)+pow(y,2));
            System.out.println("distancia de 2 puntos caso 3" + dist2Ptos
            + xBarco + xLancha + yBarco + yLancha);
        }
        else if (xBarco == xLancha && yBarco < yLancha){
                y= yLancha - yBarco;
                dist2Ptos= Math.sqrt(pow(y,2)); 
                System.out.println("distancia de 2 puntos caso 4" + dist2Ptos );
        }
        else if (xBarco < xLancha && yBarco < yLancha){
            x= xLancha -xBarco;
            y= yLancha - yBarco;
            dist2Ptos= Math.sqrt(pow(x,2)+pow(y,2));
            System.out.println("distancia de 2 puntos caso 5" + dist2Ptos );
        }
        else if(xBarco < xLancha && yBarco == yLancha){
            x=xLancha - xBarco;
            dist2Ptos= Math.sqrt(pow(x,2));
            System.out.println("distancia de 2 puntos caso 6" + dist2Ptos );
        }
        else if(xBarco < xLancha && yBarco > yLancha){
            x=xLancha - xBarco;
            y= yBarco - yLancha;
            dist2Ptos= Math.sqrt(pow(x,2)+pow(y,2));
            System.out.println("distancia de 2 puntos caso 7" + dist2Ptos );
        }
        else if(xBarco < xLancha && yBarco > yLancha){
            x=xLancha - xBarco;
            y= yBarco - yLancha;
            dist2Ptos= Math.sqrt(pow(x,2)+pow(y,2));
            System.out.println("distancia de 2 puntos caso 8" + dist2Ptos );
        }
        else if (xBarco == xLancha && yBarco > yLancha){
            y= yBarco - yLancha;
            dist2Ptos= Math.sqrt(pow(y,2));
            System.out.println("distancia de 2 puntos caso 9" + dist2Ptos );
	}
			
	menor=Math.min(dist2Ptos,rangoVisib);
        
	if (  menor == dist2Ptos || dist2Ptos == 0){
            
                 int xLancha1=partida.getCoordXLancha(1);
                 int yLancha1=partida.getCoordYLancha(1);
                System.out.println("MUESTRO MENOR RETORNA TRUE " + menor + "Distancia " + dist2Ptos + "rango " + rangoVisib + "xBarco " + xBarco + "yBarco " + yBarco + "xLancha " 
                        + xLancha1 + "yLancha " + yLancha1); 
                isVisible=true;
        }
        
        
        return isVisible;
    }
    
    /*private String buildJsonData(String username, String mensaje){
        JsonObject jsonObject = Json.createObjectBuilder().add("message", username+": "+mensaje).build();
        StringWriter stringWriter = new StringWriter();
        try(JsonWriter jsonWriter = Json.createWriter(stringWriter)) {jsonWriter.write(jsonObject);}
        return stringWriter.toString();
    }*/
}